{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Melody analysis - MusicBricks Tutorial"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This tutorial will guide you through some tools for Melody Analysis using the Essentia library (http://www.essentia.upf.edu). Melody analysis tools will extract a pitch curve from a monophonic or polyphonic audio recording [1]. It  outputs a time series (sequence of values) with the instantaneous pitch value (in Hertz) of the perceived melody. \n",
    "We provide two different operation modes: \n",
    "   1) using executable binaries; \n",
    "   2) Using Python wrappers.  \n",
    "   \n",
    "   \n",
    "References:\n",
    "\n",
    "[1] J. Salamon and E. Gómez, \"Melody extraction from polyphonic music signals using pitch contour characteristics,\" IEEE Transactions on Audio, Speech, and Language Processing, vol. 20, no. 6, pp. 1759–1770, 2012.   \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1-Using executable binaries"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can download the executable binaries for Linux (Ubuntu 14) and OSX in this link: http://tinyurl.com/melody-mbricks\n",
    "To execute the binaries you need to specify the input audio file and an output YAML file, where the melody values will be stored."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Extracting melody from monophonic audio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Locate an audio file to be processed in WAV format (input_audiofile)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Usage: ./streaming_pitchyinfft input_audiofile output_yamlfile "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Extracting melody from polyphonic audio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Usage: ./streaming_predominantmelody input_audiofile output_yamlfile "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2-Using Python wrappers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You should first install the Essentia library with Python bindings. Installation instructions are detailed here: http://essentia.upf.edu/documentation/installing.html . \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import essentia in standard mode\n",
    "import essentia.standard as es\n",
    "\n",
    "# After importing Essentia library, let's import other plotting and numerical tools\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Load an audio file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Duration of the audio sample [sec]: 14.229\n"
     ]
    }
   ],
   "source": [
    "# create an audio loader and import audio file\n",
    "sample_rate = 44100\n",
    "audio = es.MonoLoader(filename='flamenco.wav', sampleRate=sample_rate)()\n",
    "print(f\"Duration of the audio sample [sec]: {len(audio) / sample_rate:.3f}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Extract the pitch curve from the audio example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# PitchMelodia takes the entire audio signal as input - no frame-wise processing is required here...\n",
    "pExt = es.PredominantPitchMelodia(frameSize=2048, hopSize=128)\n",
    "pitch, pitchConf = pExt(audio)\n",
    "time = numpy.linspace(0.0, len(audio) / sample_rate, len(pitch))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot extracted pitch contour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the pitch contour and confidence over time\n",
    "f, axarr = plt.subplots(2, sharex=True)\n",
    "axarr[0].plot(time,pitch)\n",
    "axarr[0].set_title('estimated pitch[Hz]')\n",
    "axarr[1].plot(time,pitchConf)\n",
    "axarr[1].set_title('pitch confidence')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"./figure_1.png\" width=\"600\">"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
